$common-separator: '-';
$element-separator: '__';
$modifier-separator: '--';
$state-prefix: 'is-';


// BEM命名规范所用到的函数
// 代码解析可看解析element-ui源码的相关文章，如https://cloud.tencent.com/developer/article/1198847

@function selectorToString($selector) {
  // inspect函数返回传入的变量对应的值
  $selector: inspect($selector);
  // str-slice函数用于截取字符串
  // 使用str-slice截取inspect函数获取到的值
  $selector: str-slice($selector, 2, -2);
  @return $selector;
}

@function containsModifier($selector) {
  // 调用selectorToString获取转换后的$selector
  $selector: selectorToString($selector);
  //判断$selector是否存在 '--'字符，是则代表$selector是modifier修饰符
  @if str-index($selector, $modifier-separator) {
    @return true;
  } @else {
    @return false;
  }
}

@function containWhenFlag($selector) {
  // 调用selectorToString获取转换后的$selector
  $selector: selectorToString($selector);
  //判断$selector是否存在 '.is-'字符，是则代表$selector是flag，如.is-show
  @if str-index($selector, "." + $state-prefix) {
    @return true;
  } @else {
    @return false;
  }
}

@function containPseudoClass($selector) {
  // 调用selectorToString获取转换后的$selector
  $selector: selectorToString($selector);
  //判断$selector是否存在 ':'字符，是则代表是$selector是伪类
  @if str-index($selector, ":") {
    @return true;
  } @else {
    @return false;
  }
}
// 判断$selector是否为修饰符、flag或伪类其中一项
@function hitAllSpecialNestRule($selector) {
  @return containsModifier($selector) or containWhenFlag($selector) or
    containPseudoClass($selector);
}
